搜索 K
Appearance
博客正在加载中...
Appearance
Maven 音标 [ˈmeɪvən], 这个单词来自于犹太语,可以翻译为“知识的积累”,“专家”或“内行”。
在 Java 的世界里,Maven 是指一个主流的项目管理工具。
在学习 Maven 之前,读者应对构建和依赖有些许概念,可参考前几篇博客。
在继续讲 Maven 是什么之前,我们先讲讲 Maven 出现之前,我们是怎么管理项目的,以此加深对 Maven 的理解。
我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种必不可少的事情要做:
试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你管理 jar 包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能部署项目,生成 Web 站点..... Maven 就可以解决上面所提到的这些问题。 接下来我们会简单介绍一下 Maven 的功能,为后续的实践打下理论基础。
在 Maven 中,每一个依赖都有一个坐标(Coordinate),我们是用坐标来定位依赖的。通过一个依赖的坐标,我们可以知道这个依赖属于哪个组织、使用的是什么模块,版本号是多少,然后 Maven 能通过坐标自动下载依赖。
听不懂?我们举几个生活的例子来说明什么是坐标:
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>groupId、artifactId 和 version,这三个元素定义了一个基本的坐标:
更多关于坐标的东西,我们后面再详细展开。
之前我们说过 Maven 能通过坐标下载依赖,下载到哪里呢?仓库。仓库其实就是一个文件夹:
这个文件夹里面,根据不同的依赖分成了不同的文件夹,并且不同版本也是不同文件夹:
而 Maven 是从哪里下载依赖的呢?是一个叫做中央仓库的地方。中央仓库是 Maven 官方组织维护的一个仓库,里面收录了很多的依赖:

Maven 在运行时,首先会从本地仓库寻找依赖,没有找到就会去中央仓库下载。中央仓库是在海外的,访问速度有点慢,因此国内不少机构(例如阿里云)也搞了一个仓库:

我们可以配置不从中央仓库下载依赖,而是从阿里云下载,这样下载速度能提高不少;这种仓库就叫远程仓库。实际上,中央仓库可以认为是一个特殊的远程库。
除此之外,在公司里我们可能不能联外网(为了安全),而是公司内部也搭建了一个仓库供开发人员使用,这样能提高安全性,还可以自己决定放什么依赖上去,下载速度也会更快(局域网),更灵活。有时候我们也叫这个为私服,私服也是远程仓库。
至此,我们可以给仓库分个类:
使用仓库还有个好处:减少了重复的依赖。例如我们电脑上有 10 个项目,每个项目都用到了 Junit,在 Maven 出现之前,每个项目的 lib 目录下都有 Junit 的依赖,相当于我们电脑上有 10 个重复的 Junit。
而使用了 Maven,所有依赖都在仓库里,项目需要用到的时候直接去仓库里面取就行了,项目本身是没有存放依赖的,这样节省了不少磁盘空间。
我们之前说了什么是构建:构建、依赖管理
而使用 Maven,可以帮助我们一键构建,整个构建过程,使用 maven 一个命令可以轻松完成整个工作。Maven 将构建分为了如下几步:
清理 → 编译 → 测试 → 报告 → 打包 → 部署
每一个步骤都有对应的 Maven 命令,也可以一键完成以上步骤,大大简化了构建的成本。
一个项目中,除了代码之外,往往还有很多的其他的项目信息,例如项目的描述,开发者列表,Git 仓库地址,许可证等等,这些都是比较琐碎麻烦的;另外还有一些测试报告,静态分析报告等有价值的项目信息,这些都可以通过 Maven 来管理,无形之间也省了不少麻烦。
说了这么多,咋们聊点简单的:Maven 的历史以及学习的必要性
Maven 诞生时间大概在 2001 年 3 月,在 2007~2010 年间,Maven 开始流行起来。Maven 之父后来创建了 Sonatype 公司,该公司目前仍在维护 Maven。
Maven 作者是 Jason Van Zyl。
有必要学习 Maven 么?还是有一点必要的。原因如下:
Maven 的特点如下:
本小结我们简单说了下 Maven 的作用:构建、依赖管理和项目信息管理,并简单介绍了下坐标的概念,后续我们一步步实践来初步掌握 Maven